모의해킹
피버팅과터널링_14_ICMP 터널링
작성자 : Heehyeon Yoo|2025-12-20
# 모의해킹# PNT# ICMP# Tunneling# ptunnel-ng
1. 개요
ICMP 터널링(ICMP Tunneling)은 네트워크 진단용 프로토콜인 ICMP(Internet Control Message Protocol)의 패킷 구조를 악용하여, 데이터 페이로드를 숨겨 전송하는 기법이다.
방화벽 정책상 TCP/UDP 포트는 엄격하게 통제하더라도, 연결 상태 점검(ping)이나 트러블슈팅을 위해 ICMP 트래픽은 허용하는 경우가 많다. 이 점을 이용하여 임의의 데이터를 ICMP 패킷에 캡슐화해 방화벽을 우회한다.
2. 동작 원리
RFC 792에 정의된 ICMP 패킷 구조, 특히 Echo Request (Type 8)와 Echo Reply (Type 0) 메시지에는 가변 길이의 Data 필드가 존재한다.
- 캡슐화: 공격자는 전송하고자 하는 데이터(예: HTTP 요청, SSH 트래픽 등)를 잘게 쪼개어 ICMP 패킷의 Data 필드에 채워 넣는다.
- 전송: 조작된 ICMP Echo Request를 피벗 호스트(또는 공격자 서버)로 전송한다.
- 복호화 및 전달: 수신 측의 터널링 데몬은 ICMP 패킷을 받아 Data 필드에서 원본 데이터를 추출하고, 이를 실제 목적지(예: 웹 서버)로 전달한다.
- 응답: 목적지로부터 온 응답 데이터 역시 ICMP Echo Reply 패킷의 Data 필드에 담겨 공격자에게 돌아온다.
3. 주요 도구: ptunnel-ng
ptunnel-ng는 ICMP 터널링을 구현한 대표적인 도구이다.
3.1 서버 설정 (공격자/중계지)
# ICMP 패킷을 수신하고 처리할 서버 데몬 실행
sudo ./ptunnel-ng
3.2 클라이언트 실행 (피벗 호스트)
피벗 호스트(10.1.10.10)에서 로컬 포트(2222)로 들어오는 트래픽을 ICMP 터널을 통해 공격자(10.8.0.2)에게 보낸 뒤, 공격자가 이를 최종 목적지(google.com:80)로 릴레이하도록 설정하는 예시이다.
# 구문: ptunnel-ng -p [ProxyAddress] -l [LocalPort] -R [RemoteDestIP] -r [RemoteDestPort]
sudo ./ptunnel-ng -p 10.8.0.2 -l 2222 -R 142.250.207.100 -r 80
-p: ICMP 터널 서버(Proxy) 주소.-l: 로컬 리스닝 포트.-R: 최종 목적지 IP.-r: 최종 목적지 포트.
이후 curl localhost:2222를 실행하면, 트래픽은 ICMP 패킷에 실려 10.8.0.2로 가고, 거기서 구글로 접속된다.
4. 한계 및 OpsSec
- 성능 저하: ICMP는 비연결형 프로토콜이며, 패킷 손실 시 재전송 메커니즘을 터널링 툴이 직접 구현해야 하므로 TCP 터널링 대비 속도가 매우 느리고 불안정하다.
- 탐지 용이성 (High Risk):
- 비정상적인 페이로드 크기: 일반적인
ping패킷은 데이터 크기가 작고 일정하지만, 터널링 패킷은 MTU에 가깝게 꽉 채워져 전송된다. - 높은 빈도: 데이터 전송을 위해 단시간에 수천 개의 ICMP 패킷이 발생하므로, 트래픽 볼륨 기반 탐지에 매우 취약하다.
- 내용 검사: Data 필드를 평문으로 전송할 경우 HTTP 헤더 등의 문자열이 그대로 노출된다.
- 비정상적인 페이로드 크기: 일반적인
결론: 실무 모의해킹에서 ICMP 터널링은 TCP/UDP/DNS가 모두 막힌 최후의 수단(Last Resort)으로만 고려해야 한다.